#ifndef WIDGET_H
#define WIDGET_H

#include <string.h>
#include <QWidget>
#include<QDebug>
#include<QTcpSocket>
#include<QTcpServer>
#include <QSqlDatabase>     //数据库管理头文件
#include <QSqlQuery>        //sql指令管理头文件
#include <QSqlError>        //错误管理类
#include <QRandomGenerator>
#include <QTimer>
#include <QQueue>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
#pragma pack(push, 1)
struct sendRig{
    int type;
    char Account[64];
    char password[24];
    bool Idtype;
    char tele[24];
    int IC;
    char teletwo[24];
    char state[24];
    char ID[24];
    int num[10];
};
#pragma pack(pop)


class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    int courier_register(sendRig *str);//快递员注册
    int consignee_register(sendRig *str);//取件人注册
    int user_login(sendRig *str, sendRig * str1);//用户登录
    int stg_read(sendRig *str);//录入订单
    int usr_flush(sendRig * str,int m);//刷新客户端信息
    void empty_whitch(sendRig * str,int i); //空柜返回
    void in_return(sendRig *str);//存件反馈
    void out_return(sendRig *str);//取件反馈
private slots:
    void on_pushButton_clicked();
    void sqlinit();
    void newConnection();
    void on_pushButton_2_clicked();
    void sendNextFlushItem();
    void on_pushButton_3_clicked();
    void recvwork();
private:
    Ui::Widget *ui;
    QList <QTcpSocket*> tcpClientList;
    QMap<quint64, QTcpSocket*> requestMap; // 请求ID到原始客户端的映射
    quint64 nextRequestId; // 自增请求ID
    QTcpServer *server;
    QTcpSocket *socket;
    QTimer* m_flushTimer;
    QQueue<QPair<sendRig, int>> m_flushQueue;
    QSqlDatabase db;        //定义连接到数据库的类对象（类似于我们 数据库句柄）
};


#endif // WIDGET_H
